package com.xc.stock.aop.distributedlock;

import java.util.concurrent.TimeUnit;

/**
 * 分布式锁操作模板
 */
public interface DistributedLockTemplate {
    long DEFAULT_WAIT_TIME = 30;
    long DEFAULT_TIMEOUT   = 5;
    TimeUnit DEFAULT_TIME_UNIT = TimeUnit.SECONDS;

    /**
     * 使用分布式锁，使用锁默认超时时间。
     * @param callback
     * @param fairLock 是否使用公平锁
     * @return
     * @throws Throwable 
     */
    <T> T lock(DistributedLockCallback<T> callback, DistributedLockInfo... lockInfoList) throws Throwable;
}
